package com.skyline.base.dao;

import java.util.List;

import com.skyline.base.model.Comment;
import com.skyline.common.bean.Page;

/**
 * 评论模块的Dao接口
 * 
 * @author Jairus Chan
 * @version 0.1
 * */
public interface CommentDao extends BaseDao {
	public void insertComment(Long commenterId, String commenterNickname, String commenterPortrait, String content, Long ref,
			Long resourceId, String commentType, long ownerId);

	/**
	 * 获取一个CommentType下的所有评论(不建议使用)
	 * 
	 * @param commentType
	 *            评论类型
	 * @return 所有的评论
	 */
	@Deprecated
	public List<Comment> findAll(String commentType);

	/**
	 * 通过资源的Id来查询相应的评论
	 * 
	 * @param resourceId
	 *            资源的Id
	 * @param page
	 *            分页
	 * @param commentType
	 *            评论类型
	 * @return
	 */
	public List<Comment> queryCommentByResource(Long resourceId, Page page, String commentType);

	/**
	 * 能过资源的Id来查询这下资源下所有被引用的评论,并由服务层将queryCommentByResource,
	 * queryRefedCommentByResource结合起来生成评论列表
	 * 
	 * @param resourceId
	 *            资源Id
	 * @param commentType
	 *            评论类型
	 * @return
	 */
	public List<Comment> queryRefedCommentByResource(Long resourceId, String commentType);

	/**
	 * 通过评论者的Id来查询评论，在0.1版本中不实现
	 * 
	 * @param commenterId 评论者的ID
	 * @param commentType 评论的类型
	 * @return
	 */
	public List<Comment> queryCommentByCommenter(Long commenterId, String commentType);

	/**
	 * 删除评论(只有评论者，资源所有者，管理员可以删除此条评论)
	 * 
	 * @param resourceId
	 *            资源Id
	 * @param commentId
	 *            评论的Id
	 * @param commentType
	 *            评论类型
	 * @param actionerId
	 *            操作者的Id
	 */
	public void deleteComment(Long resourceId, Long commentId, String commentType, Long actionerId);

	/**
	 * 更新评论的引用，当这条评论被引用时，就会将其置为已被引用
	 * @param resourceId 资源Id
	 * @param commentId 评论的Id
	 * @param commentType 评论类型
	 */
	public void updateCommentRef(Long resourceId, Long commentId, String commentType);

	/**
	 * 更新评论的内容，主要为以后管理员屏蔽信息所用，在0.1版本中不实现
	 * @param resourceId 资源Id
	 * @param commentId 评论的Id
	 * @param content 内容
	 * @param commentType 评论类型
	 */
	public void updateCommentContent(Long resourceId, Long commentId,String content, String commentType);

	/**
	 * 修改其赞成数，当用户赞成此评论时就会修改
	 * @param resourceId 资源Id
	 * @param commentId
	 * @param commentType
	 */
	public void updateCommentAgree(Long resourceId, Long commentId, String commentType);

	/**
	 * 修改其反对数，当用户反对些评论时就会修改
	 * @param resourceId 资源Id
	 * @param commentId
	 * @param commentType
	 */
	public void updateCommentDisagree(Long resourceId, Long commentId, String commentType);
	
	/**
	 * 通过ID获取单条评论
	 * 
	 * @param commentId
	 *            资源Id
	 * @param commentType
	 *            评论类型
	 * @return
	 */
	public Comment queryCommentById(Long commentId, String commentType);
}
